Жадный и лучевой поиск
Введение
Рассмотрим, как можно улучшить качество текста, итеративно генерируемого слово за словом некоторой моделью, такой как рекуррентная сеть.
Предложенный метод имеет более широкую применимость. В частности, он может применяться:
к любым языковым моделям, например, трансформерам;
к генерации любых дискретных объектов (ДНК как последовательности нуклеотидов; сессии как последовательности действий пользователя на сайте и т.д.).
Сеть генерирует текст последовательно слово за словом среди уникальных слов словаря. На каждом шаге сеть выдаёт рейтингов каждого отдельного слова (или символа при посимвольной генерации):
Эти рейтинги преобразуются в вероятности слов, используя SoftMax-преобразование:
При генерации последовательности можно перебирать все варианты следующего элемента последовательности, если число вариантов невелико. Если же их много, то число вариантов-кандидатов можно сужать за счёт выбора из случайного подмножества вариантов продолжения последовательности.
Случайная генерация
Варианты продолжения последовательности можно сэмлировать из SoftMax-распределения, предсказанного моделью, причём гиперпараметр температуры в SoftMax-преобразовании управляет контрастностью выходных вероятностей.
Как именно?
При сэмплирование по-прежнему сводится к выбору самого вероятного слова и генерирует текст, который будет максимально правильным, но слишком однообразным. Увеличение повышает разнообразие ценой уменьшения согласованности слов в тексте (или букв в случае посимвольной генерации).
Таким образом, стохастическая генерация последовательности слов (или других дискретных элементов) в рекуррентной сети происходит пошагово генерируя последовательно слово за словом:
-
,
-
,
-
,
-
и т. д.
На каждом шаге можно
-
выбирать один вариант (в жадном поиске всегда выбирается элемент с максимальной апостериорной вероятностью, но для большего разнообразия последовательности можно сэмплировать из распределения);
-
несколько вариантов, а далее выбирать среди них наилучший (реализуется в лучевом поиске, см. ниже).
Чтобы уменьшить риск генерации случайно го слова, которое будет совсем выпадать из контекста, слова можно генерировать не из всего списка слов, а из подмножества максимально вероятных. Для этого есть два подхода:
-
Top-K sampling позволяет сэмплировать только слов, обладающих максимальной вероятностью.
-
Nucleus sampling: вместо задания задаётся пороговая вероятность . Слова генерируются не из всего списка, а из подмножества самых вероятных слов. Оно фо рмируется следующим образом: слова сортируются по убыванию их вероятности, и в допустимое подмножество включается минимальное число топ-K самых вероятных слов так, что их суммарная вероятность стала выше . Таким образом, Nucleus sampling представляет собой разновидность top-K sampling с динамически изменяемым параметром K, адаптивно подстраиваемым под контекст.
Генерация слов продолжается, пока не будет сгенерирован специальный токен [EOS], означающий конец последовательности, либо пока вероятность окончания генерации (предсказываемая отдельным выходом сети) не превысит порог.
Нас интересует генерация последовательности слов, обладающая максимальным рейтингом, измеряющим качество всей сгенерированной последовательности.